#include <iostream>

using namespace std;

/*
 * 函数模板和普通函数区别
 *      1、普通函数调用时可以发生自动类型转换(隐式类型转换)  char可以隐式转换为int
 *      2、函数模板调用时，如果利用自动类型推导，不会发生隐式类型转换
 *      3、如果利用显示指定类型的方式，可以发生隐式类型转换
 */

int add01(int a, int b){
    return a+b;
}

template<class T>
T add02(T a, T b){
    return a+b;
}

void test01(){
    int a = 10;
    char b = 'c';  // c-99
    cout << add01(a, b) << endl;  // 隐式转换

//    cout << add02(a, b) << endl;    // 自动类型推导，不会发生隐式转换

    cout << add02<int>(a, b) << endl;   // 显示指定，会发生类型转换
}

int main() {
    test01();

    return 0;
}
